﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Factory
{
    public partial class ManterFuncionario : Form
    {
        #region Events
        public ManterFuncionario()
        {
            InitializeComponent();
        }

        private void ManterFuncionario_Load(object sender, EventArgs e)
        {
            if (Sessao.usuarioLogado == null || Sessao.usuarioLogado.TipoFuncionario == 0)
            {
                MessageBox.Show("Você não tem permissão para  manter funcionarios");
                MenuPrincipal menu = new MenuPrincipal();
                menu.Show();
            }
            Utils.LimpaCampos(this);
            CarregarUsuarios();
        }

        private void btnVoltar_Click_1(object sender, EventArgs e)
        {
            this.Close();
            MenuPrincipal menuprincipal = new MenuPrincipal();
            menuprincipal.Show();
        }

        private void btn_Limpar_Click_1(object sender, EventArgs e)
        {
            Utils.LimpaCampos(this);
        }

        private void btn_Excluir_Click_1(object sender, EventArgs e)
        {
            if (txtCod.Text != string.Empty)
            {
                        UsuarioDAO UsuarioDAO = new UsuarioDAO();
                        int resultado = UsuarioDAO.ExcluirUsuario(Convert.ToInt32(txtCod.Text));

                        if (resultado > 0)
                        {
                            MessageBox.Show("Usuario excluído com sucesso!", "Sucesso!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            CarregarUsuarios();
                            Utils.LimpaCampos(this);
                        }

                        else
                        {
                            MessageBox.Show("Problemas ao excluir o Usuario!", "Sucesso!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
            }

            else
            {
                MessageBox.Show("Nenhum usuário selecionado para exclusão", "Problemas!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void btnSalvar_Click_1(object sender, EventArgs e)
        {
            try
            {
                bool podeAlterar = VerificaCampos();

                if (podeAlterar)
                {

                    int ehAdministrador = chkAdmin.Checked == true ? 1 : 0;

                    UsuarioDAO UsuarioDAO = new UsuarioDAO();

                    Usuario Usuario = new Usuario(Convert.ToInt32(txtCod.Text), txtCPF.Text, txtLogin.Text, txtSenha.Text, ehAdministrador);

                    int resultado = 0;

                    resultado = UsuarioDAO.atualizarUsuario(Usuario);

                    if (resultado > 0)
                    {
                        CarregarUsuarios();
                        Utils.LimpaCampos(this);
                        MessageBox.Show("Usuario alterado com sucesso!", "Sucesso!", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    }

                    else
                    {
                        MessageBox.Show("Problemas ao alterar Usuario!", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Error);

                    }
                }

                else
                {
                    MessageBox.Show("Campos em Branco!", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            if (txtNomeBusca.Text != string.Empty && txtCodBusca.Text == string.Empty)
                BuscarPorNome();

            else if (txtCodBusca.Text != string.Empty && txtNomeBusca.Text == string.Empty)
                BuscarPorCod();

            else if (txtNomeBusca.Text != string.Empty && txtCodBusca.Text != string.Empty)
                BuscarPorNomeECod();
        }

        private void dataGridUsuario_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                //verifico se o grid há linhas selecionadas
                if (dataGridUsuario.CurrentRow != null)
                {
                    //capturo o codigo da grid
                    int cod = Convert.ToInt32(dataGridUsuario.CurrentRow.Cells[0].Value);

                    //recupero o Usuario que desejo alterar
                    var Usuario = lstUsuario.SingleOrDefault(x => x.Id == cod);

                    //insiro seus valores nos controles
                    txtLogin.Text = Usuario.Login;
                    txtSenha.Text = Usuario.Senha.ToString();
                    txtCPF.Text = Usuario.cpf;
                    txtCod.Text = Usuario.Id.ToString();

                    Boolean ehAdministrador = Usuario.TipoFuncionario == 1 ? true : false;
                    chkAdmin.Checked = ehAdministrador;
                }
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        #endregion

        #region Properties
        IList<Usuario> lstUsuario = new List<Usuario>();
        string erro = string.Empty;
        #endregion

        #region Methods
        private void CarregarUsuarios()
        {
            try
            {
                UsuarioDAO UsuarioDAO = new UsuarioDAO();
                lstUsuario = UsuarioDAO.ObterUsuarios();
                var lista = from c in lstUsuario
                            select new
                            {
                                Id = c.Id,
                                Login = c.Login,
                                CPF = c.cpf,
                                Senha = c.Senha,
                                TipoFunc = c.TipoFuncionario
                            };

                dataGridUsuario.DataSource = lista.ToList();
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private bool VerificaCampos()
        {
            if (txtCod.Text == string.Empty || txtLogin.Text == string.Empty || txtCPF.Text == string.Empty || txtSenha.Text == string.Empty)
            {
                StringBuilder sb = new StringBuilder();

                sb.Append("Os seguintes campos obrigatórios estão em branco: \n\n");
                sb.Append(txtCod.Text == string.Empty ? "-Código \n" : string.Empty);
                sb.Append(txtLogin.Text == string.Empty ? "-Nome \n" : string.Empty);
                sb.Append(txtCPF.Text == string.Empty ? "-CPF \n" : string.Empty);
                sb.Append(txtSenha.Text == string.Empty ? "-Limite Aprovado \n" : string.Empty);

                erro = sb.ToString();

                return false;
            }

            else
                return true;
        }

        protected override bool ProcessCmdKey(ref Message message, Keys keys)
        {
            switch (keys)
            {
                case Keys.Escape:
                    //Process action here.
                    MenuPrincipal menu = new MenuPrincipal();
                    menu.Show();
                    this.Hide();
                    return false;
            }

            return false;
        }

        private void BuscarPorNomeECod()
        {
            try
            {
                UsuarioDAO UsuarioDAO = new UsuarioDAO();
                lstUsuario = UsuarioDAO.ObterUsuarios();
                var lista = from c in lstUsuario
                            where c.Login.ToLower().Contains(txtNomeBusca.Text.ToLower()) && c.Id == Convert.ToInt32(txtCodBusca.Text)
                            select new
                            {
                                Id = c.Id,
                                Login = c.Login,
                                CPF = c.cpf,
                                Senha = c.Senha,
                            };

                dataGridUsuario.DataSource = lista.ToList();
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void BuscarPorCod()
        {
            try
            {
                UsuarioDAO UsuarioDAO = new UsuarioDAO();
                lstUsuario = UsuarioDAO.ObterUsuarios();
                var lista = from c in lstUsuario
                            where c.Id == Convert.ToInt32(txtCodBusca.Text)
                            select new
                            {
                                Id = c.Id,
                                Login = c.Login,
                                CPF = c.cpf,
                                Senha = c.Senha,
                            };

                dataGridUsuario.DataSource = lista.ToList();
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void BuscarPorNome()
        {


            try
            {
                UsuarioDAO UsuarioDAO = new UsuarioDAO();
                lstUsuario = UsuarioDAO.ObterUsuarios();
                var lista = from c in lstUsuario
                            where c.Login.ToLower().Contains(txtNomeBusca.Text.ToLower())
                            select new
                            {
                                Id = c.Id,
                                Login = c.Login,
                                CPF = c.cpf,
                                Senha = c.Senha,
                            };

                dataGridUsuario.DataSource = lista.ToList();
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        #endregion

        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }

        private void dataGridUsuario_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }
    }
}
